home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / circuits / spice2g6.z / spice2g6 / spice / Fortran / acload.f < prev    next >
Encoding:
Text File  |  1989-02-03  |  20.8 KB  |  730 lines

  1.       subroutine acload
  2.       implicit double precision (a-h,o-z)
  3. c
  4. c     this routine zeroes-out and then loads the complex coefficient
  5. c     matrix
  6. c
  7. c spice version 2g.6  sccsid=tabinf 3/15/83
  8.       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
  9.      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
  10.      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
  11.      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
  12.      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
  13.      5   imynl,imvn,lcvn,nsnod,nsmat,nsval,icnod,icmat,icval,
  14.      6   loutpt,lpol,lzer,irswpf,irswpr,icswpf,icswpr,irpt,jcpt,
  15.      7   irowno,jcolno,nttbr,nttar,lvntmp
  16. c spice version 2g.6  sccsid=cirdat 3/15/83
  17.       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
  18.      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs,numalt,numcyc
  19. c spice version 2g.6  sccsid=status 3/15/83
  20.       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
  21.      1   xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon,
  22.      2   iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile
  23. c spice version 2g.6  sccsid=ac 3/15/83
  24.       common /ac/ fstart,fstop,fincr,skw2,refprl,spw2,jacflg,idfreq,
  25.      1   inoise,nosprt,nosout,nosin,idist,idprt
  26. c spice version 2g.6  sccsid=blank 3/15/83
  27.       common /blank/ value(200000)
  28.       integer nodplc(64)
  29.       complex cvalue(32)
  30.       equivalence (value(1),nodplc(1),cvalue(1))
  31. c
  32. c
  33.       complex cval
  34. c
  35. c  zero y matrix and current vector
  36. c
  37.       call zero8(value(lvn+1),nstop+nttbr)
  38.       call zero8(value(imvn+1),nstop+nttbr)
  39. c
  40. c  resistors
  41. c
  42.       loc=locate(1)
  43.    20 if ((loc.eq.0).or.(nodplc(loc+8).ne.0)) go to 30
  44.       locv=nodplc(loc+1)
  45.       val=value(locv+1)
  46.       locy=lynl+nodplc(loc+6)
  47.       value(locy)=value(locy)+val
  48.       locy=lynl+nodplc(loc+7)
  49.       value(locy)=value(locy)+val
  50.       locy=lynl+nodplc(loc+4)
  51.       value(locy)=value(locy)-val
  52.       locy=lynl+nodplc(loc+5)
  53.       value(locy)=value(locy)-val
  54.       loc=nodplc(loc)
  55.       go to 20
  56. c
  57. c  capacitors
  58. c
  59.    30 loc=locate(2)
  60.    40 if ((loc.eq.0).or.(nodplc(loc+12).ne.0)) go to 50
  61.       locv=nodplc(loc+1)
  62.       val=omega*value(locv+1)
  63.       locyi=imynl+nodplc(loc+10)
  64.       value(locyi)=value(locyi)+val
  65.       locyi=imynl+nodplc(loc+11)
  66.       value(locyi)=value(locyi)+val
  67.       locyi=imynl+nodplc(loc+5)
  68.       value(locyi)=value(locyi)-val
  69.       locyi=imynl+nodplc(loc+6)
  70.       value(locyi)=value(locyi)-val
  71.       loc=nodplc(loc)
  72.       go to 40
  73. c
  74. c  inductors
  75. c
  76.    50 loc=locate(3)
  77.    60 if ((loc.eq.0).or.(nodplc(loc+14).ne.0)) go to 70
  78.       locv=nodplc(loc+1)
  79.       val=omega*value(locv+1)
  80.       locyi=imynl+nodplc(loc+13)
  81.       locy=lynl+nodplc(loc+13)
  82.       value(locy)=0.0d0
  83.       value(locyi)=-val
  84.       locy=lynl+nodplc(loc+6)
  85.       locyi=imynl+nodplc(loc+6)
  86.       value(locy)=1.0d0
  87.       value(locyi)=0.0d0
  88.       locy=lynl+nodplc(loc+7)
  89.       locyi=imynl+nodplc(loc+7)
  90.       value(locy)=-1.0d0
  91.       value(locyi)=0.0d0
  92.       locy=lynl+nodplc(loc+8)
  93.       locyi=imynl+nodplc(loc+8)
  94.       value(locy)=1.0d0
  95.       value(locyi)=0.0d0
  96.       locy=lynl+nodplc(loc+9)
  97.       locyi=imynl+nodplc(loc+9)
  98.       value(locy)=-1.0d0
  99.       value(locyi)=0.0d0
  100.       loc=nodplc(loc)
  101.       go to 60
  102. c
  103. c  mutual inductors
  104. c
  105.    70 loc=locate(4)
  106.    80 if ((loc.eq.0).or.(nodplc(loc+6).ne.0)) go to 90
  107.       locv=nodplc(loc+1)
  108.       val=omega*value(locv+1)
  109.       locy=lynl+nodplc(loc+4)
  110.       locyi=imynl+nodplc(loc+4)
  111.       value(locy)=0.0d0
  112.       value(locyi)=-val
  113.       locy=lynl+nodplc(loc+5)
  114.       locyi=imynl+nodplc(loc+5)
  115.       value(locy)=0.0d0
  116.       value(locyi)=-val
  117.       loc=nodplc(loc)
  118.       go to 80
  119. c
  120. c  nonlinear voltage controlled current sources
  121. c
  122.    90 loc=locate(5)
  123.    95 if ((loc.eq.0).or.(nodplc(loc+13).ne.0)) go to 100
  124.       ndim=nodplc(loc+4)
  125.       lmat=nodplc(loc+7)
  126.       loct=lx0+nodplc(loc+12)+2
  127.       do 97 i=1,ndim
  128.       val=value(loct)
  129.       loct=loct+2
  130.       locy=lynl+nodplc(lmat+1)
  131.       value(locy)=value(locy)+val
  132.       locy=lynl+nodplc(lmat+2)
  133.       value(locy)=value(locy)-val
  134.       locy=lynl+nodplc(lmat+3)
  135.       value(locy)=value(locy)-val
  136.       locy=lynl+nodplc(lmat+4)
  137.       value(locy)=value(locy)+val
  138.       lmat=lmat+4
  139.    97 continue
  140.       loc=nodplc(loc)
  141.       go to 95
  142. c
  143. c  nonlinear voltage controlled voltage sources
  144. c
  145.   100 loc=locate(6)
  146.   105 if ((loc.eq.0).or.(nodplc(loc+14).ne.0)) go to 110
  147.       ndim=nodplc(loc+4)
  148.       lmat=nodplc(loc+8)
  149.       loct=lx0+nodplc(loc+13)+3
  150.       locy=lynl+nodplc(lmat+1)
  151.       locyi=imynl+nodplc(lmat+1)
  152.       value(locy)=+1.0d0
  153.       value(locyi)=0.0d0
  154.       locy=lynl+nodplc(lmat+2)
  155.       locyi=imynl+nodplc(lmat+2)
  156.       value(locy)=-1.0d0
  157.       value(locyi)=0.0d0
  158.       locy=lynl+nodplc(lmat+3)
  159.       locyi=imynl+nodplc(lmat+3)
  160.       value(locy)=+1.0d0
  161.       value(locyi)=0.0d0
  162.       locy=lynl+nodplc(lmat+4)
  163.       locyi=imynl+nodplc(lmat+4)
  164.       value(locy)=-1.0d0
  165.       value(locyi)=0.0d0
  166.       lmat=lmat+4
  167.       do 107 i=1,ndim
  168.       val=value(loct)
  169.       loct=loct+2
  170.       locy=lynl+nodplc(lmat+1)
  171.       value(locy)=value(locy)-val
  172.       locy=lynl+nodplc(lmat+2)
  173.       value(locy)=value(locy)+val
  174.       lmat=lmat+2
  175.   107 continue
  176.       loc=nodplc(loc)
  177.       go to 105
  178. c
  179. c  nonlinear current controlled current sources
  180. c
  181.   110 loc=locate(7)
  182.   115 if ((loc.eq.0).or.(nodplc(loc+13).ne.0)) go to 120
  183.       ndim=nodplc(loc+4)
  184.       lmat=nodplc(loc+7)
  185.       loct=lx0+nodplc(loc+12)+2
  186.       do 117 i=1,ndim
  187.       val=value(loct)
  188.       loct=loct+2
  189.       locy=lynl+nodplc(lmat+1)
  190.       locyi=imynl+nodplc(lmat+1)
  191.       value(locy)=+val
  192.       value(locyi)=0.0d0
  193.       locy=lynl+nodplc(lmat+2)
  194.       locyi=imynl+nodplc(lmat+2)
  195.       value(locy)=-val
  196.       value(locyi)=0.0d0
  197.       lmat=lmat+2
  198.   117 continue
  199.       loc=nodplc(loc)
  200.       go to 115
  201. c
  202. c  nonlinear current controlled voltage sources
  203. c
  204.   120 loc=locate(8)
  205.   125 if ((loc.eq.0).or.(nodplc(loc+14).ne.0)) go to 140
  206.       ndim=nodplc(loc+4)
  207.       lmat=nodplc(loc+8)
  208.       loct=lx0+nodplc(loc+13)+3
  209.       locy=lynl+nodplc(lmat+1)
  210.       locyi=imynl+nodplc(lmat+1)
  211.       value(locy)=+1.0d0
  212.       value(locyi)=0.0d0
  213.       locy=lynl+nodplc(lmat+2)
  214.       locyi=imynl+nodplc(lmat+2)
  215.       value(locy)=-1.0d0
  216.       value(locyi)=0.0d0
  217.       locy=lynl+nodplc(lmat+3)
  218.       locyi=imynl+nodplc(lmat+3)
  219.       value(locy)=+1.0d0
  220.       value(locyi)=0.0d0
  221.       locy=lynl+nodplc(lmat+4)
  222.       locyi=imynl+nodplc(lmat+4)
  223.       value(locy)=-1.0d0
  224.       value(locyi)=0.0d0
  225.       lmat=lmat+4
  226.       do 127 i=1,ndim
  227.       val=value(loct)
  228.       loct=loct+2
  229.       locy=lynl+nodplc(lmat+i)
  230.       value(locy)=value(locy)-val
  231.   127 continue
  232.       loc=nodplc(loc)
  233.       go to 125
  234. c
  235. c  voltage sources
  236. c
  237.   140 loc=locate(9)
  238.   150 if ((loc.eq.0).or.(nodplc(loc+11).ne.0)) go to 160
  239.       locv=nodplc(loc+1)
  240.       iptr=nodplc(loc+6)
  241.       value(lvn+iptr)=value(locv+2)
  242.       value(imvn+iptr)=value(locv+3)
  243.       locy=lynl+nodplc(loc+7)
  244.       value(locy)=value(locy)+1.0d0
  245.       locy=lynl+nodplc(loc+8)
  246.       value(locy)=value(locy)-1.0d0
  247.       locy=lynl+nodplc(loc+9)
  248.       value(locy)=value(locy)+1.0d0
  249.       locy=lynl+nodplc(loc+10)
  250.       value(locy)=value(locy)-1.0d0
  251.       loc=nodplc(loc)
  252.       go to 150
  253. c
  254. c  current sources
  255. c
  256.   160 loc=locate(10)
  257.   170 if ((loc.eq.0).or.(nodplc(loc+6).ne.0)) go to 200
  258.       locv=nodplc(loc+1)
  259.       node1=nodplc(loc+2)
  260.       node2=nodplc(loc+3)
  261.       value(lvn+node1)=value(lvn+node1)-value(locv+2)
  262.       value(imvn+node1)=value(imvn+node1)-value(locv+3)
  263.       value(lvn+node2)=value(lvn+node2)+value(locv+2)
  264.       value(imvn+node2)=value(imvn+node2)+value(locv+3)
  265.       loc=nodplc(loc)
  266.       go to 170
  267. c
  268. c  diodes
  269. c
  270.   200 loc=locate(11)
  271.   210 if ((loc.eq.0).or.(nodplc(loc+16).ne.0)) go to 250
  272.       locv=nodplc(loc+1)
  273.       area=value(locv+1)
  274.       locm=nodplc(loc+5)
  275.       locm=nodplc(locm+1)
  276.       loct=lx0+nodplc(loc+11)
  277.       gspr=value(locm+2)*area
  278.       geq=value(loct+2)
  279.       xceq=value(loct+4)*omega
  280.       locy=lynl+nodplc(loc+13)
  281.       value(locy)=value(locy)+gspr
  282.       locy=lynl+nodplc(loc+14)
  283.       locyi=imynl+nodplc(loc+14)
  284.       value(locy)=value(locy)+geq
  285.       value(locyi)=value(locyi)+xceq
  286.       locy=lynl+nodplc(loc+15)
  287.       locyi=imynl+nodplc(loc+15)
  288.       value(locy)=value(locy)+geq+gspr
  289.       value(locyi)=value(locyi)+xceq
  290.       locy=lynl+nodplc(loc+7)
  291.       value(locy)=value(locy)-gspr
  292.       locy=lynl+nodplc(loc+8)
  293.       locyi=imynl+nodplc(loc+8)
  294.       value(locy)=value(locy)-geq
  295.       value(locyi)=value(locyi)-xceq
  296.       locy=lynl+nodplc(loc+9)
  297.       value(locy)=value(locy)-gspr
  298.       locy=lynl+nodplc(loc+10)
  299.       locyi=imynl+nodplc(loc+10)
  300.       value(locy)=value(locy)-geq
  301.       value(locyi)=value(locyi)-xceq
  302.       loc=nodplc(loc)
  303.       go to 210
  304. c
  305. c  bjts
  306. c
  307.   250 loc=locate(12)
  308.   260 if ((loc.eq.0).or.(nodplc(loc+36).ne.0)) go to 300
  309.       locv=nodplc(loc+1)
  310.       area=value(locv+1)
  311.       locm=nodplc(loc+8)
  312.       locm=nodplc(locm+1)
  313.       loct=lx0+nodplc(loc+22)
  314.       gcpr=value(locm+20)*area
  315.       gepr=value(locm+19)*area
  316.       gpi=value(loct+4)
  317.       gmu=value(loct+5)
  318.       gm=value(loct+6)
  319.       go=value(loct+7)
  320.       xgm=0.0d0
  321.       td=value(locm+28)
  322.       if(td.eq.0.0d0) go to 270
  323.       arg=td*omega
  324.       gm=gm+go
  325.       xgm=-gm*dsin(arg)
  326.       gm=gm*dcos(arg)-go
  327.   270 gx=value(loct+16)
  328.       xcpi=value(loct+9)*omega
  329.       xcmu=value(loct+11)*omega
  330.       xcbx=value(loct+15)*omega
  331.       xccs=value(loct+13)*omega
  332.       xcmcb=value(loct+17)*omega
  333.       locy=lynl+nodplc(loc+24)
  334.       value(locy)=value(locy)+gcpr
  335.       locy=lynl+nodplc(loc+25)
  336.       locyi=imynl+nodplc(loc+25)
  337.       value(locy)=value(locy)+gx
  338.       value(locyi)=value(locyi)+xcbx
  339.       locy=lynl+nodplc(loc+26)
  340.       value(locy)=value(locy)+gepr
  341.       locy=lynl+nodplc(loc+27)
  342.       locyi=imynl+nodplc(loc+27)
  343.       value(locy)=value(locy)+gmu+go+gcpr
  344.       value(locyi)=value(locyi)+xcmu+xccs+xcbx
  345.       locy=lynl+nodplc(loc+28)
  346.       locyi=imynl+nodplc(loc+28)
  347.       value(locy)=value(locy)+gx+gpi+gmu
  348.       value(locyi)=value(locyi)+xcpi+xcmu+xcmcb
  349.       locy=lynl+nodplc(loc+29)
  350.       locyi=imynl+nodplc(loc+29)
  351.       value(locy)=value(locy)+gpi+gepr+gm+go
  352.       value(locyi)=value(locyi)+xcpi+xgm
  353.       locy=lynl+nodplc(loc+10)
  354.       value(locy)=value(locy)-gcpr
  355.       locy=lynl+nodplc(loc+11)
  356.       value(locy)=value(locy)-gx
  357.       locy=lynl+nodplc(loc+12)
  358.       value(locy)=value(locy)-gepr
  359.       locy=lynl+nodplc(loc+13)
  360.       value(locy)=value(locy)-gcpr
  361.       locy=lynl+nodplc(loc+14)
  362.       locyi=imynl+nodplc(loc+14)
  363.       value(locy)=value(locy)-gmu+gm
  364.       value(locyi)=value(locyi)-xcmu+xgm
  365.       locy=lynl+nodplc(loc+15)
  366.       locyi=imynl+nodplc(loc+15)
  367.       value(locy)=value(locy)-gm-go
  368.       value(locyi)=value(locyi)-xgm
  369.       locy=lynl+nodplc(loc+16)
  370.       value(locy)=value(locy)-gx
  371.       locy=lynl+nodplc(loc+17)
  372.       locyi=imynl+nodplc(loc+17)
  373.       value(locy)=value(locy)-gmu
  374.       value(locyi)=value(locyi)-xcmu-xcmcb
  375.       locy=lynl+nodplc(loc+18)
  376.       locyi=imynl+nodplc(loc+18)
  377.       value(locy)=value(locy)-gpi
  378.       value(locyi)=value(locyi)-xcpi
  379.       locy=lynl+nodplc(loc+19)
  380.       value(locy)=value(locy)-gepr
  381.       locy=lynl+nodplc(loc+20)
  382.       locyi=imynl+nodplc(loc+20)
  383.       value(locy)=value(locy)-go
  384.       value(locyi)=value(locyi)+xcmcb
  385.       locy=lynl+nodplc(loc+21)
  386.       locyi=imynl+nodplc(loc+21)
  387.       value(locy)=value(locy)-gpi-gm
  388.       value(locyi)=value(locyi)-xcpi-xgm-xcmcb
  389.       locyi=imynl+nodplc(loc+31)
  390.       value(locyi)=value(locyi)+xccs
  391.       locyi=imynl+nodplc(loc+32)
  392.       value(locyi)=value(locyi)-xccs
  393.       locyi=imynl+nodplc(loc+33)
  394.       value(locyi)=value(locyi)-xccs
  395.       locyi=imynl+nodplc(loc+34)
  396.       value(locyi)=value(locyi)-xcbx
  397.       locyi=imynl+nodplc(loc+35)
  398.       value(locyi)=value(locyi)-xcbx
  399.       loc=nodplc(loc)
  400.       go to 260
  401. c
  402. c  jfets
  403. c
  404.   300 loc=locate(13)
  405.   310 if ((loc.eq.0).or.(nodplc(loc+25).ne.0)) go to 350
  406.       locv=nodplc(loc+1)
  407.       area=value(locv+1)
  408.       locm=nodplc(loc+7)
  409.       locm=nodplc(locm+1)
  410.       loct=lx0+nodplc(loc+19)
  411.       gdpr=value(locm+4)*area
  412.       gspr=value(locm+5)*area
  413.       gm=value(loct+5)
  414.       gds=value(loct+6)
  415.       ggs=value(loct+7)
  416.       xgs=value(loct+9)*omega
  417.       ggd=value(loct+8)
  418.       xgd=value(loct+11)*omega
  419.       locy=lynl+nodplc(loc+20)
  420.       value(locy)=value(locy)+gdpr
  421.       locy=lynl+nodplc(loc+21)
  422.       locyi=imynl+nodplc(loc+21)
  423.       value(locy)=value(locy)+ggd+ggs
  424.       value(locyi)=value(locyi)+xgd+xgs
  425.       locy=lynl+nodplc(loc+22)
  426.       value(locy)=value(locy)+gspr
  427.       locy=lynl+nodplc(loc+23)
  428.       locyi=imynl+nodplc(loc+23)
  429.       value(locy)=value(locy)+gdpr+gds+ggd
  430.       value(locyi)=value(locyi)+xgd
  431.       locy=lynl+nodplc(loc+24)
  432.       locyi=imynl+nodplc(loc+24)
  433.       value(locy)=value(locy)+gspr+gds+gm+ggs
  434.       value(locyi)=value(locyi)+xgs
  435.       locy=lynl+nodplc(loc+9)
  436.       value(locy)=value(locy)-gdpr
  437.       locy=lynl+nodplc(loc+10)
  438.       locyi=imynl+nodplc(loc+10)
  439.       value(locy)=value(locy)-ggd
  440.       value(locyi)=value(locyi)-xgd
  441.       locy=lynl+nodplc(loc+11)
  442.       locyi=imynl+nodplc(loc+11)
  443.       value(locy)=value(locy)-ggs
  444.       value(locyi)=value(locyi)-xgs
  445.       locy=lynl+nodplc(loc+12)
  446.       value(locy)=value(locy)-gspr
  447.       locy=lynl+nodplc(loc+13)
  448.       value(locy)=value(locy)-gdpr
  449.       locy=lynl+nodplc(loc+14)
  450.       locyi=imynl+nodplc(loc+14)
  451.       value(locy)=value(locy)-ggd+gm
  452.       value(locyi)=value(locyi)-xgd
  453.       locy=lynl+nodplc(loc+15)
  454.       value(locy)=value(locy)-gds-gm
  455.       locy=lynl+nodplc(loc+16)
  456.       locyi=imynl+nodplc(loc+16)
  457.       value(locy)=value(locy)-ggs-gm
  458.       value(locyi)=value(locyi)-xgs
  459.       locy=lynl+nodplc(loc+17)
  460.       value(locy)=value(locy)-gspr
  461.       locy=lynl+nodplc(loc+18)
  462.       value(locy)=value(locy)-gds
  463.       loc=nodplc(loc)
  464.       go to 310
  465. c
  466. c  mosfets
  467. c
  468.   350 loc=locate(14)
  469.   360 if ((loc.eq.0).or.(nodplc(loc+33).ne.0)) go to 400
  470.       locv=nodplc(loc+1)
  471.       locm=nodplc(loc+8)
  472.       itype=nodplc(locm+2)
  473.       locm=nodplc(locm+1)
  474.       devmod=value(locv+8)
  475.       xnrm=1.0d0
  476.       xrev=0.0d0
  477.       if (devmod.ge.0.0d0) go to 370
  478.       xnrm=0.0d0
  479.       xrev=1.0d0
  480.   370 loct=lx0+nodplc(loc+26)
  481.       if (value(locm+7).eq.0.0d0.and.
  482.      1   value(locm+8).eq.0.0d0) go to 375
  483.       gdpr=value(locm+7)
  484.       gspr=value(locm+8)
  485.       go to 380
  486.   375 gdpr=value(locm+16)/value(locv+13)
  487.       gspr=value(locm+16)/value(locv+14)
  488.   380 gm=value(loct+7)
  489.       gds=value(loct+8)
  490.       gmbs=value(loct+9)
  491.       gbd=value(loct+10)
  492.       gbs=value(loct+11)
  493.       capbd=value(loct+24)
  494.       capbs=value(loct+26)
  495. cc
  496. cc    charge oriented model parameters
  497. cc
  498.       xl=value(locv+1)-2.0d0*value(locm+28)
  499.       xw=value(locv+2)
  500.       xqco=value(locm+35)
  501.       xqc=value(locv+15)
  502.       covlgs=value(locm+13)*xw
  503.       covlgd=value(locm+14)*xw
  504.       covlgb=value(locm+15)*xl
  505.       if (xqco.gt.0.5d0) go to 385
  506.       cggb=value(loct+18)
  507.       cgdb=value(loct+19)
  508.       cgsb=value(loct+20)
  509.       cbgb=value(loct+21)
  510.       cbdb=value(loct+22)
  511.       cbsb=value(loct+23)
  512.       gcg=(cggb+cbgb)*omega
  513.       gcd=(cgdb+cbdb)*omega
  514.       gcs=(cgsb+cbsb)*omega
  515.       xcgxd=-xqc*gcg
  516.       xcgxs=-(1.0d0-xqc)*gcg
  517.       xcdxd=-xqc*gcd
  518.       xcdxs=-(1.0d0-xqc)*gcd
  519.       xcsxd=-xqc*gcs
  520.       xcsxs=-(1.0d0-xqc)*gcs
  521.       xcdgb=xcgxd-covlgd*omega
  522.       xcddb=xcdxd+(capbd+covlgd)*omega
  523.       xcdsb=xcsxd
  524.       xcsgb=xcgxs-covlgs*omega
  525.       xcsdb=xcdxs
  526.       xcssb=xcsxs+(capbs+covlgs)*omega
  527.       xcggb=(cggb+covlgd+covlgs+covlgb)*omega
  528.       xcgdb=(cgdb-covlgd)*omega
  529.       xcgsb=(cgsb-covlgs)*omega
  530.       xcbgb=(cbgb-covlgb)*omega
  531.       xcbdb=(cbdb-capbd)*omega
  532.       xcbsb=(cbsb-capbs)*omega
  533.       go to 390
  534. c
  535. c     meyer"s model parameters
  536. c
  537.   385 xcgs=(value(loct+12)+covlgs)*omega
  538.       xcgd=(value(loct+14)+covlgd)*omega
  539.       xcgb=(value(loct+16)+covlgb)*omega
  540.       xbd=capbd*omega
  541.       xbs=capbs*omega
  542. cc
  543. cc    do the mapping from meyer"s model into charge oriented model
  544. cc
  545.       xcggb=xcgd+xcgs+xcgb
  546.       xcgdb=-xcgd
  547.       xcgsb=-xcgs
  548.       xcbgb=-xcgb
  549.       xcbdb=-xbd
  550.       xcbsb=-xbs
  551.       xcddb=xcgd+xbd
  552.       xcssb=xcgs+xbs
  553. cc    xcgsb=-xcgb
  554.       xcdgb=-xcgd
  555.       xcsgb=-xcgs
  556.       xcdsb=0.0d0
  557.       xcsdb=0.0d0
  558. cc
  559.   390 locyi=imynl+nodplc(loc+28)
  560.       value(locyi)=value(locyi)+xcggb
  561.       locyi=imynl+nodplc(loc+30)
  562.       value(locyi)=value(locyi)-xcbgb-xcbdb-xcbsb
  563.       locyi=imynl+nodplc(loc+31)
  564.       value(locyi)=value(locyi)+xcddb
  565.       locyi=imynl+nodplc(loc+32)
  566.       value(locyi)=value(locyi)+xcssb
  567.       locyi=imynl+nodplc(loc+11)
  568.       value(locyi)=value(locyi)-xcggb-xcgdb-xcgsb
  569.       locyi=imynl+nodplc(loc+12)
  570.       value(locyi)=value(locyi)+xcgdb
  571.       locyi=imynl+nodplc(loc+13)
  572.       value(locyi)=value(locyi)+xcgsb
  573.       locyi=imynl+nodplc(loc+15)
  574.       value(locyi)=value(locyi)+xcbgb
  575.       locyi=imynl+nodplc(loc+16)
  576.       value(locyi)=value(locyi)+xcbdb
  577.       locyi=imynl+nodplc(loc+17)
  578.       value(locyi)=value(locyi)+xcbsb
  579.       locyi=imynl+nodplc(loc+19)
  580.       value(locyi)=value(locyi)+xcdgb
  581.       locyi=imynl+nodplc(loc+20)
  582.       value(locyi)=value(locyi)-xcdgb-xcddb-xcdsb
  583.       locyi=imynl+nodplc(loc+21)
  584.       value(locyi)=value(locyi)+xcdsb
  585.       locyi=imynl+nodplc(loc+22)
  586.       value(locyi)=value(locyi)+xcsgb
  587.       locyi=imynl+nodplc(loc+24)
  588.       value(locyi)=value(locyi)-xcsgb-xcsdb-xcssb
  589.       locyi=imynl+nodplc(loc+25)
  590.       value(locyi)=value(locyi)+xcsdb
  591.       locy=lynl+nodplc(loc+27)
  592.       value(locy)=value(locy)+gdpr
  593.       locy=lynl+nodplc(loc+29)
  594.       value(locy)=value(locy)+gspr
  595.       locy=lynl+nodplc(loc+30)
  596.       value(locy)=value(locy)+gbd+gbs
  597.       locy=lynl+nodplc(loc+31)
  598.       value(locy)=value(locy)+gdpr+gds+gbd+xrev*(gm+gmbs)
  599.       locy=lynl+nodplc(loc+32)
  600.       value(locy)=value(locy)+gspr+gds+gbs+xnrm*(gm+gmbs)
  601.       locy=lynl+nodplc(loc+10)
  602.       value(locy)=value(locy)-gdpr
  603.       locy=lynl+nodplc(loc+14)
  604.       value(locy)=value(locy)-gspr
  605.       locy=lynl+nodplc(loc+16)
  606.       value(locy)=value(locy)-gbd
  607.       locy=lynl+nodplc(loc+17)
  608.       value(locy)=value(locy)-gbs
  609.       locy=lynl+nodplc(loc+18)
  610.       value(locy)=value(locy)-gdpr
  611.       locy=lynl+nodplc(loc+19)
  612.       value(locy)=value(locy)+(xnrm-xrev)*gm
  613.       locy=lynl+nodplc(loc+20)
  614.       value(locy)=value(locy)-gbd+(xnrm-xrev)*gmbs
  615.       locy=lynl+nodplc(loc+21)
  616.       value(locy)=value(locy)-gds-xnrm*(gm+gmbs)
  617.       locy=lynl+nodplc(loc+22)
  618.       value(locy)=value(locy)-(xnrm-xrev)*gm
  619.       locy=lynl+nodplc(loc+23)
  620.       value(locy)=value(locy)-gspr
  621.       locy=lynl+nodplc(loc+24)
  622.       value(locy)=value(locy)-gbs-(xnrm-xrev)*gmbs
  623.       locy=lynl+nodplc(loc+25)
  624.       value(locy)=value(locy)-gds-xrev*(gm+gmbs)
  625.       loc=nodplc(loc)
  626.       go to 360
  627. c
  628. c  transmission lines
  629. c
  630.   400 loc=locate(17)
  631.   410 if ((loc.eq.0).or.(nodplc(loc+33).ne.0)) go to 1000
  632.       locv=nodplc(loc+1)
  633.       z0=value(locv+1)
  634.       y0=1.0d0/z0
  635.       td=value(locv+2)
  636.       arg=-omega*td
  637.       rval=dcos(arg)
  638.       xval=dsin(arg)
  639.       locy=lynl+nodplc(loc+10)
  640.       value(locy)=value(locy)+y0
  641.       locy=lynl+nodplc(loc+11)
  642.       locyi=imynl+nodplc(loc+11)
  643.       value(locy)=-y0
  644.       value(locyi)=0.0d0
  645.       locy=lynl+nodplc(loc+12)
  646.       locyi=imynl+nodplc(loc+12)
  647.       value(locy)=-1.0d0
  648.       value(locyi)=0.0d0
  649.       locy=lynl+nodplc(loc+13)
  650.       value(locy)=value(locy)+y0
  651.       locy=lynl+nodplc(loc+14)
  652.       locyi=imynl+nodplc(loc+14)
  653.       value(locy)=-1.0d0
  654.       value(locyi)=0.0d0
  655.       locy=lynl+nodplc(loc+15)
  656.       locyi=imynl+nodplc(loc+15)
  657.       value(locy)=-y0
  658.       value(locyi)=0.0d0
  659.       locy=lynl+nodplc(loc+16)
  660.       locyi=imynl+nodplc(loc+16)
  661.       value(locy)=+y0
  662.       value(locyi)=0.0d0
  663.       locy=lynl+nodplc(loc+17)
  664.       locyi=imynl+nodplc(loc+17)
  665.       value(locy)=+1.0d0
  666.       value(locyi)=0.0d0
  667.       locy=lynl+nodplc(loc+18)
  668.       locyi=imynl+nodplc(loc+18)
  669.       value(locy)=+y0
  670.       value(locyi)=0.0d0
  671.       locy=lynl+nodplc(loc+19)
  672.       locyi=imynl+nodplc(loc+19)
  673.       value(locy)=+1.0d0
  674.       value(locyi)=0.0d0
  675.       locy=lynl+nodplc(loc+20)
  676.       locyi=imynl+nodplc(loc+20)
  677.       value(locy)=-1.0d0
  678.       value(locyi)=0.0d0
  679.       locy=lynl+nodplc(loc+21)
  680.       locyi=imynl+nodplc(loc+21)
  681.       value(locy)=-rval
  682.       value(locyi)=-xval
  683.       locy=lynl+nodplc(loc+22)
  684.       locyi=imynl+nodplc(loc+22)
  685.       value(locy)=+rval
  686.       value(locyi)=+xval
  687.       locy=lynl+nodplc(loc+23)
  688.       locyi=imynl+nodplc(loc+23)
  689.       value(locy)=+1.0d0
  690.       value(locyi)=0.0d0
  691.       locy=lynl+nodplc(loc+24)
  692.       locyi=imynl+nodplc(loc+24)
  693.       value(locy)=-rval*z0
  694.       value(locyi)=-xval*z0
  695.       locy=lynl+nodplc(loc+25)
  696.       locyi=imynl+nodplc(loc+25)
  697.       value(locy)=-rval
  698.       value(locyi)=-xval
  699.       locy=lynl+nodplc(loc+26)
  700.       locyi=imynl+nodplc(loc+26)
  701.       value(locy)=+rval
  702.       value(locyi)=+xval
  703.       locy=lynl+nodplc(loc+27)
  704.       locyi=imynl+nodplc(loc+27)
  705.       value(locy)=-1.0d0
  706.       value(locyi)=0.0d0
  707.       locy=lynl+nodplc(loc+28)
  708.       locyi=imynl+nodplc(loc+28)
  709.       value(locy)=+1.0d0
  710.       value(locyi)=0.0d0
  711.       locy=lynl+nodplc(loc+29)
  712.       locyi=imynl+nodplc(loc+29)
  713.       value(locy)=-rval*z0
  714.       value(locyi)=-xval*z0
  715.       locy=lynl+nodplc(loc+31)
  716.       locyi=imynl+nodplc(loc+31)
  717.       value(locy)=-y0
  718.       value(locyi)=0.0d0
  719.       locy=lynl+nodplc(loc+32)
  720.       locyi=imynl+nodplc(loc+32)
  721.       value(locy)=-y0
  722.       value(locyi)=0.0d0
  723.       loc=nodplc(loc)
  724.       go to 410
  725. c
  726. c  finished
  727. c
  728.  1000 return
  729.       end
  730.